package ace.module.mail.address.api;

import ace.cmp.core.model.PageResultDto;
import ace.cmp.core.model.R;
import ace.cmp.sdk.api.SdkApi;


import ace.module.common.api.model.input.TenantAndAppTypeInput;
import ace.module.mail.address.api.model.dto.MadMailAddressDto;
import ace.module.mail.address.api.model.input.mailaddress.MadMailAddressAddInput;
import ace.module.mail.address.api.model.input.mailaddress.MadMailAddressModifyInput;
import ace.module.mail.address.api.model.input.mailaddress.MadMailAddressSearchInput;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;

/**
 * 邮寄地址 api.
 *
 * @author Caspar
 */
public interface MadMailAddressApi extends SdkApi<MadMailAddressDto, Long> {

  /**
   * 搜索邮寄地址.
   *
   * @param input 过滤参数
   * @return 分页结果
   */
  R<PageResultDto<MadMailAddressDto>> search(@Valid @NotNull MadMailAddressSearchInput input);

  /**
   * 根据应用外键,添加地址.
   *
   * @param input 地址参数
   * @return 地址id
   */
  R<Long> addByAppOutId(@Valid @NotNull MadMailAddressAddInput input);

  /**
   * 根据应用外键,修改地址.
   *
   * @param input 地址参数
   * @return 0=success
   */
  R<Void> modifyByAppOutId(@Valid @NotNull MadMailAddressModifyInput input);

  /**
   * 根据租户id、应用类型、邮寄地址id查询
   *
   * @param input 参数
   * @return 地址
   */
  R<MadMailAddressDto> getByTenantAndAppTypeAndId(
      @Valid @NotNull TenantAndAppTypeInput<Long> input);
}